﻿/**
@file SpriteD3D.h
@author onlytest
@brief SpriteD3D类的定义
*/
#ifndef SPRITED3D_H
#define SPRITED3D_H
#include "SpritePerDefine.h"
#include "SpriteMath.h"
#include "SpriteCamera.h"
namespace Sprite
{
	/**
	@brief SpriteD3D主要用于D3D的初始化根据选用不同的DirectX进行扩展
	*/
	class SpriteD3D
	{
	public:
		/**
		@brief D3D的构造函数
		@param void
		@return   
		*/
		SpriteD3D(void);
		/**
		@brief initD3D函数的初始化
		@param  HMainWnd	窗口主句柄
		@param  nWidth 屏幕宽度
		@param  nHeight 屏幕高度
		@return   是否成功
		*/
		virtual	HRESULT	initD3D(HWND HMainWnd,int nWidth,int nHeight);		
		/**
		@brief resetOMTargetsAndViewport设置渲染目标和视口
		*/
		virtual	void resetOMTargetsAndViewport();		
		/**
		@brief onResize改变大小时调用此函数
		*/
		virtual void onResize();
		/**
		@brief onResize改变大小时调用此函数
		*/

		/**
		@brief onResize
		@param  nWidth 屏幕宽度
		@param  nHeight 屏幕高度
		*/
		virtual void onResize(int nWidth,int nHeight);
		/**
		@brief ~SpriteD3D析构函数		
		*/
		virtual ~SpriteD3D(void);
		/**
		@brief clear清理屏幕
		*/
		virtual void clear();
		/**
		@brief 开始绘制
		*/
		virtual void begin();
		/**
		@brief 结束绘制
		*/
		virtual void end();
		/**
		@brief 得到DX10设备指针
		*/
		virtual ID3D10Device* getDevice10()const;
		
		/**
		@brief getProj得到投影矩阵
		@return   返回矩阵类型的投影矩阵
		*/
		virtual SpriteMat getProj(void);
	protected:
		///屏幕宽度
		int m_nWidth;	
		///屏幕高度
		int m_nHeight;	
		///窗口句柄
		HWND	m_HMainWnd;
		///DX10设备指针
		ID3D10Device* m_IDevice10;
		///投影矩阵
		SpriteMat m_pProjMat;
		
	};
	extern SpriteD3D* g_pCD3d;
}

#endif